package com.weipt.juc.lock;

/**
 * @author peter.wei 2020/09/09 16:22
 * @version 1.0
 * @company 终生学习
 * @description <br>peter.wei 2020/09/09 16:22
 **/
public class HelloSyn {
    public static void main(String[] args) {
        Ticket ticket = new Ticket();

        //所谓的并发，就是多个线程操作同一资源
        //资源就是票，此处利用lambda实现
        new Thread(ticket::sale_ticket, "小明").start(); //JDK8的一种语法糖。
        new Thread(() -> ticket.sale_ticket(), "小黑").start(); //lambda
        new Thread(new Runnable() {     //匿名内部类
            @Override
            public void run() {
                ticket.sale_ticket();
            }
        }, "小红").start();
    }
}


//按照java oop思想，类就是单纯做自己的事情，不要去实现runnable
//实现最大限度的解耦
class Ticket{
    public int ticket_num = 50;
//synchronized 是一个关键字，用于给资源（票）自动加锁/解锁
    public synchronized void sale_ticket(){
        while (true){
            if (ticket_num <= 0){
                return;
            }
            System.out.println(Thread.currentThread().getName()+"当前正在购买："+ ticket_num--+"剩余："+ticket_num);
        }
    }
}